<?php
namespace App\Admin\Extensions\Grid\Tool;

use Encore\Admin\Actions\Action;
use Illuminate\Http\Request;
//use Illuminate\Support\Facades\Storage;
//use Maatwebsite\Excel\Facades\Excel;
//use Maatwebsite\Excel\HeadingRowImport;
class Import1 extends Action
{
    protected $_importer;

    protected $selector = '.import-post';

    const FILE_MAX_SIZE = 15 * 1024 * 1024;

    /**
     * Importer constructor.
     * @param $importer
     */
    public function __construct($importer)
    {
        parent::__construct();

        $this->_importer = $importer;
    }

    public function handle(Request $request)
    {
        try{
            // 下面的代码获取到上传的文件，然后使用`maatwebsite/excel`等包来处理上传你的文件，保存到数据库
            $file = $request->file('file');
            if ($file->isValid()) {
                //判断文件扩展是否符合要求
//                $allowExtension = ['xls', 'csv', 'xlsx'];
//                $fileExtension = $file->getClientOriginalExtension();
//                if (!in_array($fileExtension, $allowExtension)) {
//                    return $this->response()->error('您上传的文件后缀不支持，仅支持' . implode(',', $allowExtension));
//                }
                //判断大小是否符合15M
                if ($file->getSize() >= self::FILE_MAX_SIZE) {
                    return $this->response()->error('您上传的的文件过大，最大15M');
                }
                //判断表头是否符合规范
                //规范的表头
//                $exampleTitle = ['站点', 'SKU'];
                //使用maatwebsite/excel，获取excel表头
//                $headings = (new HeadingRowImport)->toArray($file);
                //判断符合模板表头
//                if ( ! empty(array_diff( $headings[0][0], $exampleTitle))) {
//                    return $this->response()->error('上传的excel格式不符合规范，请下载示例后填充数据并上传');
//                }
                //移动到文件夹
//                $sFilePath = public_path('uploads/stocking');
//                if (!is_dir($sFilePath)) {
//                    mkdir($sFilePath, 0775, true);
//                }
//                $fileName = $file->getClientOriginalName();
//                $sFileName = $fileName.'-'.date('YmdHis') . '.' . $fileExtension;
//                Storage::disk('admin')->put('stocking/' . $sFileName, file_get_contents($file->getRealPath()));
                //excel数据处理
//                Excel::import(new NewSkuImporter(), $sFilePath . '/' . $sFileName);
                $errorStr = "";
                $import = $this->_importer;
                $import->import($file);
                foreach ($import->failures() as $failure) {
                    $errorStr .=  ' 第'. $failure->row() . '行 失败原因：' .
                        implode(' ', $failure->errors()) . '<br> 行数据：' .
                        implode(' ', $failure->values()). '<br>';
                }
                if ($errorStr !== '') {
                    return $this->response()->error($errorStr)->topFullWidth()->timeout(7000000);
                }
                return $this->response()->success("操作成功！")->refresh();
            }else{
                return $this->response()->error('无效文件！');
            }
        }catch (\Exception $e){
            report($e);
            return $this->response()->error('系统异常！');
        }
    }

    public function form()
    {
        $this->file('file', '请选择文件')
            ->options([
                'showPreview' => false,
                'allowedFileExtensions' => ['.xls','xlsx'],
//                'maxFileSize' => self::FILE_MAX_SIZE,
//                'showUpload'=>true,
//                'msgSizeTooLarge' => '文件 "{name}" (<b>{size} KB</b>) 超过了允许大小 <b>{maxSize} KB</b>',
        ])->help('请按照模板录入数据，切勿更改或删除表头，文件后缀为.xlsx或.xls')
            ->rules('required', ['required' => '文件不能为空']);
    }

    public function html()
    {
        return <<<HTML
        <a class="btn btn-sm btn-default import-post">导入</a>
HTML;
    }
}
